[2025-07-11] CSRF
🦥 본문
정의
사용자가 의도하지 않은 요청을 공격자가 대신 전송하게 만드는 공격. 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼수 있는 취약점.
동작 흐름
-
공격자가 작성한 악성 스크립트를 이용자가 실행
<img src='http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337' width=0px height=0px> /* 새 창 띄우기 */ window.open('http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337'); /* 현재 창 주소 옮기기 */ location.href = 'http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337'; location.replace('http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337');
- 공격자의 악성 사이트가 서버에 요청을 보냄
- 브라우저는 인증 쿠키를 자동으로 붙여 전송
- 쿠키를 이용하여 민감 정보에 접근/탈취
XSS와 공통점&차이점
공통점 : 클라이언트 대상 공격. 악성 스크립트가 포함된 페이지에 접속하도록 유도
차이점 | XSS | CSRF |
---|---|---|
공격 자유도 | 공격자의 자유도 높음(JS로 할 수 있는 모든것) | Backend Level에서 지원하는 로직만 악용 가능 |
방어 접근법 | 필터링으로 비정상적인 요청 검열 | 정상적인 req도 정상적인 사용자의 것인지 검증 |
목적 | 쿠키 탈취, 공격할 사이트의 오리진에서 스크립트를 실행 | 임의 페이지에 HTTP 요청을 보내는 것을 목적. 이용자의 권한으로 웹 서비스의 임의 기능을 실행 |
대응 방안
- CSRF Token 사용 : Request를 보낼 때마다 갱신되는 토큰. 브라우저와 서버말고는 알 수 없음. 패킷을 낚아채도 CSRF가 갱신되므로 필터링 가능
- Cookie에 “SameSite’ Flag 사용 : 외부 사이트에서 발생한 요청에 대해 서버는 쿠키를 반환하지 않음
- Refere 헤더 검증 : 개발자가 임의로 “요청을 보낸 곳”을 확인할 수 있음 → 잘 사용 X
- 사용자 세션 검증 강화
- CORS 정책 강화 : 교차 출처 리소스 공유; 서로 다른 출처의 웹페이지나 서버가 자원에 접근할 수 있도록 허용하는 기술. CSP와 CORS를 섞어 씀
Leave a comment